<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>全集群重启和滚动重启 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'restart-cluster.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/restart-cluster.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/restart-cluster.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/restart-cluster.html" rel="nofollow" target="_blank">../en/restart-cluster.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="setup.html">安装和设置</a></span>
»
<span class="breadcrumb-node">全集群重启和滚动重启</span>
</div>
<div class="navheader">
<span class="prev">
<a href="add-elasticsearch-nodes.html">« 向集群中添加/移除节点</a>
</span>
<span class="next">
<a href="modules-remote-clusters.html">远程集群 »</a>
</span>
</div>
<div class="chapter">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="restart-cluster"></a>全集群重启和滚动重启 (Full-cluster restart and rolling restart)
</h2>
</div></div></div>
<p>
你可能 <a href="configuring-tls.html#tls-transport" class="ulink" target="_top">希望在某些情况下执行全集群重启</a> 或滚动重启。

在 <a class="xref" href="restart-cluster.html#restart-cluster-full" title="Full-cluster restart">全集群重启</a> 的情况下，要关闭并重启集群中的所有节点，而在 <a class="xref" href="restart-cluster.html#restart-cluster-rolling" title="Rolling restart">滚动重启</a> 的情况下，一次仅关闭一个节点，因此服务不会中断。
</p>
<h3>
<a id="restart-cluster-full"></a>全集群重启 (Full-cluster restart)
</h3>
<div class="olist orderedlist">
<ol class="orderedlist">
<li class="listitem">
<p><span class="strong strong"><strong>禁用分片分配</strong></span></p>
<p>
当你关闭一个节点时，分配进程会等待 <code class="literal">index.unassigned.node_left.delayed_timeout</code> (默认值为 1 分钟)，然后开始将该节点上的分片复制到集群中的其他节点，这可能会涉及大量 I/O。

由于该节点将很快重新启动，因此不需要此 I/O。

通过在关闭节点之前 <a class="xref" href="modules-cluster.html#cluster-routing-allocation-enable">禁用副本分配</a>，可以避免与时间赛跑：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "primaries"
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/42.console"></div>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>停止索引并执行同步刷新(flush)</strong></span></p>
<p>执行一个 <a class="xref" href="indices-synced-flush-api.html" title="Synced flush API">同步刷新(synced-flush)</a> 可以加速分片恢复。</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _flush/synced</pre>
</div>
<div class="console_widget" data-snippet="snippets/43.console"></div>
<p>
执行同步刷新时，检查响应以确保没有失败。

由于挂起的索引操作导致失败了的同步刷新操作会在响应正文中列出，尽管请求本身仍会返回 200 OK 状态。
如果失败，重新发出请求。
</p>
<p>
请注意，同步刷新已过时，将在8.0中删除。
Elasticsearch 7.6 或更高版本上的 刷新(flush) 与 同步刷新(synced flush) 效果相同。
</p>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>暂时停止与主动机器学习工作和数据馈送(datafeed)相关的任务。</strong></span> (可选)</p>
<p>
机器学习功能需要白金级或更高级别的许可证。
有关 Elastic 许可级别的更多信息，请参考 <a href="https://www.elastic.co/subscriptions" class="ulink" target="_top">订阅页面</a>。
</p>
<p>
当关闭集群时，你有两种选择来处理机器学习作业 和 数据馈送(datafeed)：
</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
使用 <a class="xref" href="ml-set-upgrade-mode.html" title="Set upgrade mode API">设置升级模式(set upgrade mode) API</a> 暂时停止与机器学习作业和数据馈送(datafeed)相关联的任务，并阻止新作业的打开：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _ml/set_upgrade_mode?enabled=true</pre>
</div>
<div class="console_widget" data-snippet="snippets/44.console"></div>
<p>
当禁用升级模式时，作业将继续使用自动保存的最后一个模型状态。  
此选项避免了集群关闭期间管理活动作业的开销，并且比显式停止数据馈送和关闭作业更快。
</p>
</li>
<li class="listitem">
<a href="https://www.elastic.co/guide/en/machine-learning/7.7/stopping-ml.html" class="ulink" target="_top">停止所有数据馈送(datafeed)并关闭所有作业</a>。
此选项保存关闭时的模型状态。
当你在集群重新启动后重新打开作业时，它们使用完全相同的模型。

但是，保存最新的模型状态比使用升级模式花费的时间更长，尤其是当你有许多作业或作业具有较大的模型状态时。
</li>
</ul>
</div>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>关闭所有节点</strong></span></p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>如果你是使用 <code class="literal">systemd</code> 运行的 Elasticsearch：</p>
<div class="pre_wrapper lang-sh">
<pre class="programlisting prettyprint lang-sh">sudo systemctl stop elasticsearch.service</pre>
</div>
</li>
<li class="listitem">
<p>如果你是使用 SysV <code class="literal">init</code> 运行的 Elasticsearch：</p>
<div class="pre_wrapper lang-sh">
<pre class="programlisting prettyprint lang-sh">sudo -i service elasticsearch stop</pre>
</div>
</li>
<li class="listitem">
<p>如果你是以守护进程方式运行的 Elasticsearch：</p>
<div class="pre_wrapper lang-sh">
<pre class="programlisting prettyprint lang-sh">kill $(cat pid)</pre>
</div>
</li>
</ul>
</div>
</li>
<li class="listitem">
<span class="strong strong"><strong>执行任何必要的更改。</strong></span>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>重启节点。</strong></span></p>
<p>
如果你有专用的主节点，请先启动它们，等待它们形成集群，并在继续处理数据节点之前选举一个主节点。你可以通过查看日志来检查进度。
</p>
<p>
一旦有足够多的符合主节点条件的节点发现了彼此，它们就形成一个集群并选举一个主节点。
此时，您可以使用 <a class="xref" href="cat-health.html" title="cat health API">cat health</a> 和 <a class="xref" href="cat-nodes.html" title="cat nodes API">cat nodes</a> API 来监控加入集群的节点：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET _cat/health

GET _cat/nodes</pre>
</div>
<div class="console_widget" data-snippet="snippets/45.console"></div>
<p>
<code class="literal">status</code> column returned by <code class="literal">_cat/health</code> 返回的 <code class="literal">status</code> 列显示了集群中每个节点的运行状况：<code class="literal">red</code>，<code class="literal">yellow</code>，或 <code class="literal">green</code>。
</p>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>等待所有节点加入集群，并报告 yellow 状态。</strong></span></p>
<p>
当一个节点加入集群时，它开始恢复本地存储的任何主分片。
<a class="xref" href="cat-health.html" title="cat health API"><code class="literal">_cat/health</code></a> API 最初报告 <code class="literal">red</code> 的 <code class="literal">status</code><span class="remark">(状态)</span>，表示尚未分配所有主分片。
</p>
<p>
一旦节点恢复其本地分片，集群 <code class="literal">status</code> 将切换为 <code class="literal">yellow</code>，表示所有主分片都已恢复，但并非所有副本分片都已分配。

这是意料之中的，因为尚未重新启用分配。

延迟副本的分配直到所有节点都是 <code class="literal">yellow</code> 的，这将允许主节点将副本分配给已经具有本地副本分片的节点。
</p>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>重新启用分配</strong></span></p>
<p>
当所有节点都加入集群并恢复其主分片时，通过将 <code class="literal">cluster.routing.allocation.enable</code> 恢复为默认值来重新启用分配：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/46.console"></div>
<p>
一旦重新启用分配，集群就开始向数据节点分配副本分片。

此时，恢复索引和搜索是安全的，但是如果你能够等到所有主分片和副本分片都已成功分配并且所有节点的状态都为 <code class="literal">green</code>，你的集群将恢复得更快。
</p>
<p>你可以使用 <a class="xref" href="cat-health.html" title="cat health API"><code class="literal">_cat/health</code></a> 和 <a class="xref" href="cat-recovery.html" title="cat recovery API"><code class="literal">_cat/recovery</code></a> API 来监控进度：</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET _cat/health

GET _cat/recovery</pre>
</div>
<div class="console_widget" data-snippet="snippets/47.console"></div>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>重新启动机器学习作业</strong></span> (可选)</p>
<p>
如果你暂时停止了与机器学习作业相关联的任务，请使用 <a class="xref" href="ml-set-upgrade-mode.html" title="Set upgrade mode API">set upgrade mode API</a> 将它们恢复到活动状态：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _ml/set_upgrade_mode?enabled=false</pre>
</div>
<div class="console_widget" data-snippet="snippets/48.console"></div>
<p>
如果在停止节点之前关闭了所有机器学习作业，请打开作业并从 Kibana 启动数据馈送，或者使用 <a class="xref" href="ml-open-job.html" title="Open anomaly detection jobs API">open jobs</a> 和 <a class="xref" href="ml-start-datafeed.html" title="Start datafeeds API">start datafeed</a> API。
</p>
</li>
</ol>
</div>
<h3>
<a id="restart-cluster-rolling"></a>滚动重启 (Rolling restart)
</h3>
<div class="olist orderedlist">
<ol class="orderedlist">
<li class="listitem">
<p><span class="strong strong"><strong>禁用分片分配</strong></span></p>
<p>
当你关闭一个节点时，分配进程会等待 <code class="literal">index.unassigned.node_left.delayed_timeout</code> (默认值为 1 分钟)，然后开始将该节点上的分片复制到集群中的其他节点，这可能会涉及大量 I/O。

由于该节点将很快重新启动，因此不需要此 I/O。

通过在关闭节点之前 <a class="xref" href="modules-cluster.html#cluster-routing-allocation-enable">禁用副本分配</a>，可以避免与时间赛跑：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "primaries"
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/49.console"></div>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>停止索引并执行同步刷新(flush)</strong></span></p>
<p>执行一个 <a class="xref" href="indices-synced-flush-api.html" title="Synced flush API">同步刷新(synced-flush)</a> 可以加速分片恢复。</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _flush/synced</pre>
</div>
<div class="console_widget" data-snippet="snippets/50.console"></div>
<p>
执行同步刷新时，检查响应以确保没有失败。

由于挂起的索引操作导致失败了的同步刷新操作会在响应正文中列出，尽管请求本身仍会返回 200 OK 状态。
如果失败，重新发出请求。
<p>
请注意，同步刷新已过时，将在8.0中删除。
Elasticsearch 7.6 或更高版本上的 刷新(flush) 与 同步刷新(synced flush) 效果相同。
</p>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>暂时停止与主动机器学习工作和数据馈送相关的任务。</strong></span> (可选)</p>
<p>
机器学习功能需要白金级或更高级别的许可证。
有关 Elastic 许可级别的更多信息，请参考 <a href="https://www.elastic.co/subscriptions" class="ulink" target="_top">订阅页面</a>。
</p>
<p>
当关闭集群时，你有两种选择来处理机器学习作业 和 数据馈送 (datafeed):
</p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>
使用 <a class="xref" href="ml-set-upgrade-mode.html" title="Set upgrade mode API">设置升级模式(set upgrade mode) API</a> 暂时停止与机器学习作业和数据馈送相关联的任务，并阻止新作业的打开：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _ml/set_upgrade_mode?enabled=true</pre>
</div>
<div class="console_widget" data-snippet="snippets/51.console"></div>
<p>
当禁用升级模式时，作业将继续使用自动保存的最后一个模型状态。  
此选项避免了集群关闭期间管理活动作业的开销，并且比显式停止数据馈送和关闭作业更快。
</p>
</li>
<li class="listitem">
<a href="https://www.elastic.co/guide/en/machine-learning/7.7/stopping-ml.html" class="ulink" target="_top">停止所有数据馈送并关闭所有作业</a>。
此选项保存关闭时的模型状态。
当你在集群重新启动后重新打开作业时，它们使用完全相同的模型。

但是，保存最新的模型状态比使用升级模式花费的时间更长，尤其是当你有许多作业或作业具有较大的模型状态时。
</li>
</ul>
</div>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
如果执行滚动重启，你也可以让机器学习作业继续运行。

当你关闭机器学习节点时，它的作业会自动移动到另一个节点，并恢复模型状态。

此选项使作业能够在关闭期间继续运行，但这会增加集群的负载。
</li>
</ul>
</div>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>在滚动重启的情况下关闭单个节点。</strong></span></p>
<div class="ulist itemizedlist">
<ul class="itemizedlist">
<li class="listitem">
<p>如果你是使用 <code class="literal">systemd</code> 运行的 Elasticsearch：</p>
<div class="pre_wrapper lang-sh">
<pre class="programlisting prettyprint lang-sh">sudo systemctl stop elasticsearch.service</pre>
</div>
</li>
<li class="listitem">
<p>如果你是使用 SysV <code class="literal">init</code> 运行的 Elasticsearch：</p>
<div class="pre_wrapper lang-sh">
<pre class="programlisting prettyprint lang-sh">sudo -i service elasticsearch stop</pre>
</div>
</li>
<li class="listitem">
<p>如果你是以守护进程方式运行的 Elasticsearch：</p>
<div class="pre_wrapper lang-sh">
<pre class="programlisting prettyprint lang-sh">kill $(cat pid)</pre>
</div>
</li>
</ul>
</div>
</li>
<li class="listitem">
<span class="strong strong"><strong>执行任何必要的更改。</strong></span>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>重启你修改过的节点。</strong></span></p>
<p>
启动节点，并通过检查日志文件或提交一个 <code class="literal">_cat/nodes</code> 请求来确认它已加入集群:
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET _cat/nodes</pre>
</div>
<div class="console_widget" data-snippet="snippets/52.console"></div>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>重新启用分配。</strong></span></p>
<p>
节点加入集群后，删除 <code class="literal">cluster.routing.allocation.enable</code> 设置以启用分片分配并开始使用节点：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/53.console"></div>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>在滚动重启的情况下重复上述步骤。</strong></span></p>
<p>
当节点恢复并且集群稳定后，对每个需要更改的节点重复这些步骤。
</p>
</li>
<li class="listitem">
<p><span class="strong strong"><strong>重新启动机器学习作业</strong></span> (可选)</p>
<p>
如果你暂时停止了与机器学习作业相关联的任务，请使用 <a class="xref" href="ml-set-upgrade-mode.html" title="Set upgrade mode API">设置升级模式(set upgrade mode) API</a> 将它们恢复到活动状态：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">POST _ml/set_upgrade_mode?enabled=false</pre>
</div>
<div class="console_widget" data-snippet="snippets/54.console"></div>
<p>
如果在停止节点之前关闭了所有机器学习作业，请打开作业并从 Kibana 启动数据馈送，或者使用 <a class="xref" href="ml-open-job.html" title="Open anomaly detection jobs API">open jobs</a> 和 <a class="xref" href="ml-start-datafeed.html" title="Start datafeeds API">start datafeed</a> API。
</p>
</li>
</ol>
</div>
</div>
<div class="navfooter">
<span class="prev">
<a href="add-elasticsearch-nodes.html">« 向集群中添加/移除节点</a>
</span>
<span class="next">
<a href="modules-remote-clusters.html">远程集群 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>